package q50_myPow;

public class Solution_1 {
    public static void main(String[] args) {
        Solution_1 s = new Solution_1();
        System.out.println(s.myPow(0.00001,2147483647));
    }

    public double myPow(double x, int n) {
        // 在题目的设置中，n的值可以取Integer的最小值 即-2**31 ，那么当使用PositivePow函数时，转为正数将会导致溢出
        long N = n;
        return n >= 0 ? PositivePow(x,N) : 1/PositivePow(x,-N);
    }

    private double PositivePow(double x, long N){
        if (N == 0) {
            return 1.0;
        }
        double y = PositivePow(x, N / 2);
        return N % 2 == 0 ? y * y : y * y * x;

    }
}
